package testes;

import agenda.Contato;
import agenda.Email;
import agenda.Evento;
import agenda.Skype;
import agenda.Telefone;
import excecoes.HorarioInvalido;
import excecoes.NomeInvalido;
import excecoes.DataInvalida;
import org.junit.*;

public class ContatoTest {

	private Contato contato1;

	@Before
	public void setUp() throws Exception {
		contato1 = new Contato("macaco","Av. das palmeiras","18/12",new Email("zeze@ois.com"));
	}

	@Test
	public void testGetAndSetNome() throws NomeInvalido  {

		Assert.assertEquals("macaco",contato1.getNome());

		contato1.setNome("loko");
		Assert.assertEquals("loko",contato1.getNome());

		contato1.setNome("MDMP");
		Assert.assertEquals("MDMP",contato1.getNome());

	}

	@Test
	public void testGetAndSetEndereco()  {

		Assert.assertEquals("Av. das palmeiras",contato1.getEndereco());

		contato1.setEndereco("Av. esqueci");
		Assert.assertEquals("Av. esqueci", contato1.getEndereco());

		contato1.setEndereco("Quadra 123");
		Assert.assertEquals("Quadra 123",contato1.getEndereco());

	}

	@Test
	public void testGetAndSetDataDeAniversario() throws DataInvalida  {

		Assert.assertEquals("18/12", contato1.getDataAniversarioFormatada());

		contato1.setDataAniversario("20/01");
		Assert.assertEquals("20/01",contato1.getDataAniversarioFormatada());

		contato1.setDataAniversario("01/09");
		Assert.assertEquals("01/09",contato1.getDataAniversarioFormatada());
	}

	@Test
	public void testGetAndAddFormaDeContato() throws Exception {

		//TODO remember!
	}

	@Test
	public void testGetAndAddEvento() throws DataInvalida, HorarioInvalido {

		Assert.assertTrue(contato1.getEventos().isEmpty());

		Evento evento1 = new Evento("aquele","18/01/2009","10:30","03:00","evento legal");
		contato1.addEvento(evento1);
		Assert.assertTrue(contato1.getEventos().contains(evento1));

		Evento evento2 = new Evento("outro","19/01/2009","10:30","03:00","evento bem legal");
		contato1.addEvento(evento2);
		Assert.assertTrue(contato1.getEventos().contains(evento2) || contato1.getEventos().contains(evento1));

	}

	@Test
	public void testExcecoes() throws Exception {

		//excecoes no construtor
		try {
			contato1 = new Contato("mosquitinho24","Av. hmm", "07/07", new Telefone("456789"));
		} catch(NomeInvalido e) {
			Assert.assertEquals("Um nome nao deve conter numeros ou caracteres especiais.",e.getMessage());
		}

		try {
			contato1 = new Contato("mosquitinho","Av. hmm","00/12", new Skype("mosquitinhow"));
		} catch(DataInvalida e) {
			Assert.assertEquals("Dia invalido!", e.getMessage());
		}

		try {
			contato1.setDataAniversario("01/13");
		} catch(DataInvalida e) {
			Assert.assertEquals("Mes invalido!", e.getMessage());
		}
	}

}